<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>178原型对象prototype</title>
</head>

<body>
  <h1>178原型对象prototype</h1>
  <script>
    /* 
      1 通过原型来解决构造函数在实例化时存在的缺陷
        所有实例化对象共享的函数不要写在构造函数内部，把它写到原型内部，实现共享。
        每个构造函数都有一个prototype属性，它指向构造函数的原型对象。
        构造函数和构造函数的原型对象中的this都指向实例化对象
    */
    function Star(uname, age) {
      this.uname = uname
      this.age = age
    }
    Star.prototype.sing = function () {
      console.log('唱歌')
    }
    let ldh = new Star('刘德华', 18)
    let zxy = new Star('张学友', 18)
    console.log(ldh.sing === zxy.sing) // true 证明通过原型对象共享了所有实例化对象通用的sing函数。实现复用，节省内存。
  </script>
</body>

</html>